package saei.bean;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.ForeignKey;

import saei.bean.parametros.Procesador;
import saei.bean.vo.CpuVO;

@SuppressWarnings("serial")
@Entity
@PrimaryKeyJoinColumn(name="id_equipo")
public class Cpu extends Equipo
{
    @Column(name="cant_ram")
    private Integer ram;
    @Column(name="tamanio_hdd")
    private Integer hdd;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_cpu_procesador")
    @JoinColumn(name="id_procesador")
    private Procesador procesador;
    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @JoinTable(name="Software_Instalado",
	joinColumns=@JoinColumn(name="id_equipo"),
	inverseJoinColumns=@JoinColumn(name="id_software"))
    private List<Software> software;

    public Cpu () {
    	super();
    	setSoftware(new ArrayList<Software>());
    }

    public void agregarSoftware(Software software){
    	if (!this.software.contains(software)) {
    		this.software.add(software);
		}
    }

    public void eliminarLicencia(Software software){
    	if (this.software.contains(software)) {
    		this.software.remove(software);
		}
    }

	public Integer getRam() {
		return ram;
	}

	public void setRam(Integer ram) {
		this.ram = ram;
	}

	public Integer getHdd() {
		return hdd;
	}

	public void setHdd(Integer hdd) {
		this.hdd = hdd;
	}

	public Procesador getProcesador() {
		return procesador;
	}

	public void setProcesador(Procesador procesador) {
		this.procesador = procesador;
	}

	public List<Software> getSoftware() {
		return software;
	}

	public void setSoftware(List<Software> software) {
		this.software = software;
	}
	
	public CpuVO getVO() {
		CpuVO vo = new CpuVO();
		vo.setEstado(this.getEstado().getDescripcion());
		vo.setMarca(this.getMarca().getDescripcion());
		vo.setModelo(this.getModelo().getDescripcion());
		vo.setNumeroSerie(this.getNumeroSerie());
		vo.setObservaciones(this.getObservaciones());
		vo.setHdd(hdd);
		vo.setProcesador(procesador.getDescripcion());
		vo.setRam(ram);
		vo.setNumeroRemito(this.getRemito().getNumero());
		
		return vo;
	}
}